home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************
- Source File: STRINGTS.C
-
- Test driver for routines in STRINGS.OBJ.
-
- Editors: Microsoft Works, Microsoft Word
- Compiler: Borland Turbo C 2.01
-
- Copyright (c) 1993, Richard Zigler.
- *************************************************************************/
-
- #include <conio.h> /* for clrscr(), etc. */
- #include <stdlib.h> /* for ato?() */
- #include <stdio.h> /* for printf(), scanf(), etc. */
- #include "stringz.h" /* string function prototypes */
-
- /****
- The routines in STRINGS.OBJ can handle strings up to 32767 bytes
- long, but the strings in the driver routine are limited to 128
- characters. To increase the size limit, redefine MAXBUF.
- ****/
-
- /**** Data Type Synonyms ****/
-
- typedef unsigned char BYTE;
- typedef unsigned short WORD;
- typedef unsigned long DWORD;
- typedef int FLAG; /* int-size true/false flag */
- typedef char BFLAG; /* byte-size true/false flag */
-
- #define OPS 12
- #define MAXBUF 128
-
- static char *StringOps[OPS] = /* menu options */
- {
- " 0 -- Quit" ,
- " 1 -- Left String" ,
- " 2 -- Mid String" ,
- " 3 -- Right String" ,
- " 4 -- Left Trim" ,
- " 5 -- Right Trim" ,
- " 6 -- Left Justify" ,
- " 7 -- Right Justify" ,
- " 8 -- Center String" ,
- " 9 -- Replace String" ,
- "10 -- Insert String" ,
- "11 -- Create Template",
- };
-
- static char IndexStr[] =
- " | 1 2 3 4 5 6|\r\n"
- " |123456789012345678901234567890123456789012345678901234567890|" ;
-
- static char SrcStr [MAXBUF+1] = "This is the original source string";
- static char SamStr [MAXBUF+1] = ""; /* test same dest/src strings */
- static char TemStr [MAXBUF+1] = ""; /* template string */
- static char TgtStr [MAXBUF+1] = ""; /* normal destination string */
- static char NullStr[MAXBUF+1] = ""; /* test null source string */
- static char OpStr [MAXBUF+1] ; /* for atoi() */
-
- static char ReplaceStr[] = "REPLACED";
- static char InsertStr[] = "INSERTED";
- static char LineStr[] = "----------------------";
- static char JstStr[] = " A string with two spaces at each end ";
-
- static char far * sPtr , /* pointer to return string */
- far * nPtr , /* test null source string */
- far * NullPtrN , /* test null dest pointers */
- far * NullPtrF ; /* (both near and far) */
-
- /************************************************************************/
- void main(void)
- {
- register int i; /* general and operation indexes */
- int op;
- short ch, /* parameter variables */
- start,
- num,
- yn;
- char * srcptr; /* ptr to source string */
- char * strcpy( char *, char * );
-
- #if defined(__TURBOC__)
- extern char _video; /* internal Turbo C table */
- *((char *)&_video + 10) = 0; /* turn off snow control */
- #endif
-
- do
- {
- clrscr();
- for ( i = 0 ; i < OPS ; i++ )
- cprintf( "%s\r\n", StringOps[i] );
- cprintf( "%s\r\n", LineStr );
- do
- {
- cprintf( "Choose operation: " );
- op = atoi( gets( OpStr ) );
- gotoxy( 1, wherey() - 1 );
- delline();
- }
- while( op < 0 || op >= OPS || !*OpStr );
- if ( op == 0 )
- break; /* out of main loop */
- *NullStr = *TgtStr = '\0';
- NullPtrN = (char near *) 0;
- NullPtrF = (char far *) 0;
- srcptr = (op == 4 || op == 5) ? JstStr : SrcStr ;
- strcpy( SamStr, srcptr );
- clrscr();
- cprintf
- (
- "%s\r\n"
- "%s\r\n"
- "\r\n"
- "%s\r\n"
- "Source: |%s|\r\n"
- "\r\n"
- , StringOps[op], LineStr, IndexStr, srcptr
- );
- switch ( op )
- {
- case 2 : /* get start and fall through */
- cprintf( " Start: " );
- start = atoi( gets( OpStr ) );
- case 1 :
- case 3 :
- cprintf( "Length: " );
- if ( (num = atoi( gets( OpStr ) )) > MAXBUF )
- num = MAXBUF;
- switch ( op )
- {
- case 1 :
- sPtr = LeftStr( SamStr, SamStr, num );
- sPtr = LeftStr( TgtStr, srcptr, num );
- nPtr = LeftStr( NullStr, "", num );
- NullPtrF = LeftStr( NullPtrF, srcptr, num );
- NullPtrN = LeftStr( NullPtrN, srcptr, num );
- break;
- case 2 :
- sPtr = MidStr( SamStr, SamStr, start, num );
- sPtr = MidStr( TgtStr, srcptr, start, num );
- nPtr = MidStr( NullStr, "", start, num );
- NullPtrF = MidStr( NullPtrF, srcptr, start, num );
- NullPtrN = MidStr( NullPtrN, srcptr, start, num );
- break;
- case 3 :
- sPtr = RightStr( SamStr, SamStr, num );
- sPtr = RightStr( TgtStr, srcptr, num );
- nPtr = RightStr( NullStr, "", num );
- NullPtrF = RightStr( NullPtrF, srcptr, num );
- NullPtrN = RightStr( NullPtrN, srcptr, num );
- break;
- }
- break;
- case 4 :
- sPtr = lTrim( SamStr, SamStr );
- sPtr = lTrim( TgtStr, srcptr );
- nPtr = lTrim( NullStr, "" );
- NullPtrF = lTrim( NullPtrF, srcptr );
- NullPtrN = lTrim( NullPtrN, srcptr );
- break;
- case 5 :
- sPtr = rTrim( SamStr, SamStr );
- sPtr = rTrim( TgtStr, srcptr );
- nPtr = rTrim( NullStr, "" );
- NullPtrF = rTrim( NullPtrF, srcptr );
- NullPtrN = rTrim( NullPtrN, srcptr );
- break;
- case 6 :
- case 7 :
- case 8 :
- cprintf( " Size: " );
- num = atoi( gets( OpStr ) );
- if ( num > MAXBUF )
- num = MAXBUF;
- cprintf( " Fill: " );
- ch = getche(); putchar( '\n' );
- switch ( op )
- {
- case 6 :
- sPtr = lJust( SamStr, SamStr, num, ch );
- sPtr = lJust( TgtStr, srcptr, num, ch );
- nPtr = lJust( NullStr, "", num, ch );
- NullPtrF = lJust( NullPtrF, srcptr, num, ch );
- NullPtrN = lJust( NullPtrN, srcptr, num, ch );
- break;
- case 7 :
- sPtr = rJust( SamStr, SamStr, num, ch );
- sPtr = rJust( TgtStr, srcptr, num, ch );
- nPtr = rJust( NullStr, "", num, ch );
- NullPtrF = rJust( NullPtrF, srcptr, num, ch );
- NullPtrN = rJust( NullPtrN, srcptr, num, ch );
- break;
- case 8 :
- sPtr = cJust( SamStr, SamStr, num, ch );
- sPtr = cJust( TgtStr, srcptr, num, ch );
- nPtr = cJust( NullStr, "", num, ch );
- NullPtrF = cJust( NullPtrF, srcptr, num, ch );
- NullPtrN = cJust( NullPtrN, srcptr, num, ch );
- break;
- } /* switch */
- break;
- case 9:
- case 10:
- strcpy( TgtStr, srcptr );
- cprintf( "Start: " );
- start = atoi( gets( OpStr ) );
- if ( op == 9 )
- {
- sPtr = ReplStr( SamStr, SamStr, start );
- sPtr = ReplStr( TgtStr, ReplaceStr, start );
- nPtr = ReplStr( NullStr, ReplaceStr, start );
- NullPtrF = ReplStr( NullPtrF, ReplaceStr, start );
- NullPtrN = ReplStr( NullPtrN, ReplaceStr, start );
- }
- else
- {
- sPtr = InsStr( SamStr, SamStr, start );
- sPtr = InsStr( TgtStr, InsertStr, start );
- nPtr = InsStr( NullStr, InsertStr, start );
- NullPtrF = InsStr( NullPtrF, InsertStr, start );
- NullPtrN = InsStr( NullPtrN, InsertStr, start );
- }
- break;
- case 11:
- cprintf( "Enter template: " );
- gets( TgtStr );
- cprintf( " Enter source: " );
- gets( TemStr );
- cprintf( " Enter flag: " );
- ch = getche(); putchar( '\n' );
- strcpy( SamStr, TgtStr );
- sPtr = TemplStr( SamStr, SamStr, ch );
- sPtr = TemplStr( TgtStr, TemStr, ch );
- nPtr = TemplStr( NullStr, TemStr, ch );
- NullPtrF = TemplStr( NullPtrF, TemStr, ch );
- NullPtrN = TemplStr( NullPtrN, TemStr, ch );
- break;
- } /* switch */
- cprintf
- (
- "\r\n"
- "Destination Strings\r\n"
- "%s\r\n"
- "\r\n"
- "%s\r\n"
- " Same: |%s|\r\n"
- "Target: |%s|\r\n"
- " Blank: |%s|\r\n"
- " NullF: %Fp\r\n"
- " NullN: %Fp\r\n"
- "\r\n"
- "Quit (y/n)? "
- , LineStr, IndexStr, SamStr
- , (char *) sPtr, (char *) nPtr, NullPtrF, NullPtrN
- );
-
- if ( (yn = getche()) == 0 )
- yn = getche();
- }
- while ( yn != 'y' && yn != 'Y' );
- }
-
- /**** EOF: STRINGTS.C ****/